package com.sloth.controller;

import com.sloth.pojo.Customer;
import com.sloth.pojo.Product;
import com.sloth.service.PlaceAnOrderService;
import com.sloth.service.SeckillService;
import com.sloth.util.ServerResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

/**
 * @author lai
 * @time 2021/11/8 17:48
 */

/**
 * 秒杀商品下单页面
 */
@Controller
public class SeckillPlaceAnOrderController {

    @Autowired
    private PlaceAnOrderService placeAnOrderService;

    @Autowired
    private SeckillService seckillService;

    // 秒杀商品，点击去支付之后跳转到订单页面的 controller 层请求
    // 从前端获得到 商品id，因为秒杀商品只能购买一件，所以前端传值，只传一个 商品id 就可以
    @GetMapping("/order/seckill_place_an_order")
    @ResponseBody
    public ModelAndView SeckillPlaceAnOrder(Customer customer,@RequestParam("seckillProductId") Integer seckillProductId){

        // 1. 判断登录
        if (customer==null){
            return null;
        }

        // 订单id 拿到了，然后通过 订单id 向数据库中查询该用户的收货地址
        // 获得除了第一个收件地址的其他地址
        ServerResponse serverResponseAddressList = placeAnOrderService.getByCustomerIdAddress(customer.getCustId());
        System.out.println("第一个以外的其他收货地址： " + serverResponseAddressList);

        // 返回数据库中的第一条收货地址
        ServerResponse byCustomerIdAddressFirst = placeAnOrderService.getByCustomerIdAddressFirst(customer.getCustId());
        System.out.println("第一个收货地址： " + byCustomerIdAddressFirst);

        // 返回订单中包含的商品信息
        Product product = seckillService.getProductBySeckillProductId(seckillProductId);
        System.out.println("秒杀商品信息： " + product);

        // 返回秒杀商品的价格
        Double seckillPrice = seckillService.getSeckillProductPriceBySeckillProductId(seckillProductId);
        System.out.println("秒杀商品的价格： " + product);

        // 在数据库 秒杀订单 中查询到该订单包含的商品信息，秒杀价格
        ModelAndView modelAndView = new ModelAndView();

        // 返回除了第一个以外的其他收货地址信息
        modelAndView.addObject("serverResponseAddressList",serverResponseAddressList);
        // 返回的是第一条收货地址
        modelAndView.addObject("byCustomerIdAddressFirst",byCustomerIdAddressFirst);
        // 返回订单中包含的商品信息
        modelAndView.addObject("product",product);
        // 返回秒杀商品的价格
        modelAndView.addObject("seckillPrice",seckillPrice);
        // 返回秒杀商品id
        modelAndView.addObject("seckillProductId",seckillProductId);

        // 跳转到 秒杀下单 页面
        modelAndView.setViewName("order/seckill_place_an_order");

        return modelAndView;
    }

}